Crate surf[−][src]
Expand description
Surf the web - HTTP client framework
Surf is a Rust HTTP client built for ease-of-use and multi-HTTP-backend flexibility. Whether it’s a quick script, or a cross-platform SDK, Surf will make it work.
- Extensible through a powerful middleware system
- Multiple HTTP back-ends that can be chosen
- Reuses connections through a configurable
Client
interface - Fully streaming requests and responses
- TLS enabled by default (native tls or rustls)
- Built on async-std (with optional tokio support)
Examples
let mut res = surf::get("https://httpbin.org/get").await?;
dbg!(res.body_string().await?);
It’s also possible to skip the intermediate Response
, and access the response type directly.
dbg!(surf::get("https://httpbin.org/get").recv_string().await?);
Both sending and receiving JSON is real easy too.
#[derive(Deserialize, Serialize)]
struct Ip {
ip: String
}
let uri = "https://httpbin.org/post";
let data = &Ip { ip: "129.0.0.1".into() };
let res = surf::post(uri).body_json(data)?.await?;
assert_eq!(res.status(), 200);
let uri = "https://api.ipify.org?format=json";
let Ip { ip } = surf::get(uri).recv_json().await?;
assert!(ip.len() > 10);
And even creating streaming proxies is no trouble at all.
let req = surf::get("https://img.fyi/q6YvNqP").await?;
let body = surf::http::Body::from_reader(req, None);
let res = surf::post("https://box.rs/upload").body(body).await?;
Setting configuration on a client is also straightforward.
use std::convert::TryInto;
use std::time::Duration;
use surf::{Client, Config};
use surf::Url;
let client: Client = Config::new()
.set_base_url(Url::parse("http://example.org")?)
.set_timeout(Some(Duration::from_secs(5)))
.try_into()?;
let mut res = client.get("/").await?;
println!("{}", res.body_string().await?);
Features
The following features are available. The default features are
curl-client
, middleware-logger
, and encoding
curl-client
(default): usecurl
(throughisahc
) as the HTTP backend.h1-client
: useasync-h1
as the HTTP backend with native TLS for HTTPS.h1-client-rustls
: useasync-h1
as the HTTP backend withrustls
for HTTPS.hyper-client
: usehyper
(hyper.rs) as the HTTP backend.wasm-client
: usewindow.fetch
as the HTTP backend.middleware-logger
(default): enables logging requests and responses using a middleware.encoding
(default): enables support for body encodings other than utf-8.
Re-exports
pub use http_types as http;
Modules
Middleware types
Miscellaneous utilities.
Structs
A streaming HTTP body.
An HTTP client, capable of sending Request
s and running a middleware stack.
Configuration for surf::Client
s and their underlying HTTP clients.
An error occurred while decoding a response body to a string.
The error type for HTTP operations.
An HTTP request, returns a Response
.
Request Builder
An HTTP response, returned by Request
.
A parsed URL record.
Enums
HTTP response status codes.
Traits
An abstract HTTP client.
Provides the status
method for Result
and Option
.
Functions
Construct a new Client
, capable of sending Request
s and running a middleware stack.
Perform a one-off CONNECT
request.
Perform a one-off DELETE
request.
Perform a one-off GET
request.
Perform a one-off HEAD
request.
Perform a one-off OPTIONS
request.
Perform a one-off PATCH
request.
Perform a one-off POST
request.
Perform a one-off PUT
request.
Perform a one-off TRACE
request.
Type Definitions
A specialized Result type for Surf.